package demo2

import "fmt"

// TestDemo21 变量声明
func TestDemo21() {
	// 1. 基本示例

	var a int
	var b, c int = 100, 200

	fmt.Println(a)
	fmt.Println(b)
	fmt.Println(c)

	// 2. 批量声明
	// var {
	// 	b int;
	// 	c []float32;
	// 	d func() bool;
	// 	e struct {
	// 		x int;
	// 	}
	// }

	// /* 3. 简单格式
	// 	限制： 1. 定义变量，同时显式初始化。2. 不能提供数据类型 3. 只能用在函数内部。
	// */

	// func main() {
	// 	x:= 100;
	// 	a,s:=1, "abc";
	// }

	x := 100
	y := "string"

	fmt.Println(55 + x)
	fmt.Println("y: " + y)

	// // 简短变量声明被广泛用于大部分的局部变量的声明和初始化。
	// // var 形式的声明语句往往是用于需要显式指定变量类型地方，或者因为变量稍后会被重新赋值而初始值无关紧要的地方。

	// // 4. 初始化
	// var hp int = 100
	var hp = 100

	// // 4.1 类型推导
	var mp = 100

	fmt.Println(hp)
	fmt.Println(mp)
	var attack = 40
	var defence = 20
	var damageRate float32 = 0.17
	var damage = float32(attack-defence) * damageRate

	// fmt.Println(damage)

	fmt.Println(damage)

	// 4.2 短变量声明并初始化
	hmp := 110

	fmt.Println(hmp)
}
